/**
 * 更新产品配置脚本
 * 用于初始化或更新会员等级和代币包配置
 */

const { sequelize } = require("../config/database");
const ProductConfig = require("../models/ProductConfig");
const { MembershipConfig } = require("../config/pricing");

// 配置映射表 - 使用实际的Stripe价格ID
const PRICE_ID_MAPPING = {
  // 会员订阅（按会员等级）
  membership: {
    1: "price_1RqwHlChGeSzAdpVznjjAzCX", // Prelude（一级会员）：1500日元/月
    2: "price_1RqwIaChGeSzAdpVwZueHrCa", // Affinity（二级会员）：3000日元/月
    3: "price_1RqwJ1ChGeSzAdpVM7PdkPbB", // Soulmate（三级会员）：7200日元/月
  },

  // 代币包 - 一级会员
  tokens_tier1: {
    1000: "price_1RqwJqChGeSzAdpVvXbHwdvJ", // Prelude_1500：1500日元/1000代币
    5000: "price_1RqwLNChGeSzAdpVcgAVHl8m", // Prelude_7500：7500日元/5000代币
  },

  // 代币包 - 二级会员
  tokens_tier2: {
    1000: "price_1RqwLyChGeSzAdpVSYin2taA", // Affinity_1000：1000日元/1000代币
    5000: "price_1RqwMWChGeSzAdpVMeaVR2tF", // Affinity_5000：5000日元/5000代币
  },

  // 代币包 - 三级会员
  tokens_tier3: {
    1000: "price_1RqwN1ChGeSzAdpVtIrexKbW", // Soulmate_800：800日元/1000代币
    5000: "price_1RqwNlChGeSzAdpVx9R7Qvwg", // Soulmate_4000：4000日元/5000代币
  },

  // 代币包 - 非会员
  tokens_non_member: {
    1000: "price_1RqwQDChGeSzAdpVTowSkZYP", // NonMember_2000：2000日元/1000代币
    5000: "price_1RqwQaChGeSzAdpV8RGBXFpq", // NonMember_8000：8000日元/5000代币
  },
};

async function updateProductConfigs() {
  const transaction = await sequelize.transaction();

  try {
    console.log("开始更新产品配置...");

    // 创建会员订阅产品
    for (const tier of [1, 2, 3]) {
      const priceId = PRICE_ID_MAPPING.membership[tier];
      const tokenAmount = MembershipConfig.TIER_TOKENS[tier];
      const tierPrice = MembershipConfig.TIER_PRICES[tier];

      const tierNames = {
        1: "Prelude",
        2: "Affinity",
        3: "Soulmate",
      };

      await ProductConfig.findOrCreate({
        where: { stripe_price_id: priceId },
        defaults: {
          product_type: "subscription",
          name: `${tierNames[tier]}（${tier}级会员）`,
          tokens_amount: tokenAmount,
          membership_tier: tier,
          is_active: true,
        },
        transaction,
      });

      console.log(
        `已配置${tierNames[tier]}（${tier}级会员）: ${tokenAmount}代币/月`
      );
    }

    // 创建一级会员代币包
    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier1[1000] },
      defaults: {
        product_type: "payment",
        name: "Prelude_1500（一级会员）",
        tokens_amount: 1000,
        membership_tier: 1,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置一级会员1000代币包: 1500日元");

    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier1[5000] },
      defaults: {
        product_type: "payment",
        name: "Prelude_7500（一级会员）",
        tokens_amount: 5000,
        membership_tier: 1,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置一级会员5000代币包: 7500日元");

    // 创建二级会员代币包
    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier2[1000] },
      defaults: {
        product_type: "payment",
        name: "Affinity_1000（二级会员）",
        tokens_amount: 1000,
        membership_tier: 2,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置二级会员1000代币包: 1000日元");

    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier2[5000] },
      defaults: {
        product_type: "payment",
        name: "Affinity_5000（二级会员）",
        tokens_amount: 5000,
        membership_tier: 2,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置二级会员5000代币包: 5000日元");

    // 创建三级会员代币包
    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier3[1000] },
      defaults: {
        product_type: "payment",
        name: "Soulmate_800（三级会员）",
        tokens_amount: 1000,
        membership_tier: 3,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置三级会员1000代币包: 800日元");

    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_tier3[5000] },
      defaults: {
        product_type: "payment",
        name: "Soulmate_4000（三级会员）",
        tokens_amount: 5000,
        membership_tier: 3,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置三级会员5000代币包: 4000日元");

    // 创建非会员代币包
    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_non_member[1000] },
      defaults: {
        product_type: "payment",
        name: "NonMember_2000（非会员）",
        tokens_amount: 1000,
        membership_tier: null,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置非会员1000代币包: 2000日元");

    await ProductConfig.findOrCreate({
      where: { stripe_price_id: PRICE_ID_MAPPING.tokens_non_member[5000] },
      defaults: {
        product_type: "payment",
        name: "NonMember_8000（非会员）",
        tokens_amount: 5000,
        membership_tier: null,
        is_active: true,
      },
      transaction,
    });
    console.log("已配置非会员5000代币包: 8000日元");

    await transaction.commit();
    console.log("产品配置更新完成!");
  } catch (error) {
    await transaction.rollback();
    console.error("更新产品配置失败:", error);
  } finally {
    process.exit();
  }
}

// 执行脚本
updateProductConfigs();
